package com.example.appcommon.utils;

import org.springframework.util.StringUtils;

/**
 * 字符串工具类
 */
public class StringUtil {
    
    /**
     * 判断字符串是否为空
     * @param str 待判断的字符串
     * @return 如果字符串为null或空字符串，返回true
     */
    public static boolean isEmpty(String str) {
        return !StringUtils.hasText(str);
    }
    
    /**
     * 判断字符串是否不为空
     * @param str 待判断的字符串
     * @return 如果字符串不为null且不为空字符串，返回true
     */
    public static boolean isNotEmpty(String str) {
        return StringUtils.hasText(str);
    }
    
    /**
     * 将字符串转换为驼峰命名
     * @param str 待转换的字符串
     * @return 转换后的驼峰命名字符串
     */
    public static String toCamelCase(String str) {
        if (isEmpty(str)) {
            return str;
        }
        
        StringBuilder result = new StringBuilder();
        boolean capitalizeNext = false;
        
        for (int i = 0; i < str.length(); i++) {
            char currentChar = str.charAt(i);
            if (currentChar == '_' || currentChar == '-') {
                capitalizeNext = true;
            } else {
                if (capitalizeNext) {
                    result.append(Character.toUpperCase(currentChar));
                    capitalizeNext = false;
                } else {
                    result.append(Character.toLowerCase(currentChar));
                }
            }
        }
        
        return result.toString();
    }
    
    /**
     * 将字符串转换为下划线命名
     * @param str 待转换的字符串
     * @return 转换后的下划线命名字符串
     */
    public static String toSnakeCase(String str) {
        if (isEmpty(str)) {
            return str;
        }
        
        StringBuilder result = new StringBuilder();
        boolean first = true;
        
        for (int i = 0; i < str.length(); i++) {
            char currentChar = str.charAt(i);
            if (Character.isUpperCase(currentChar)) {
                if (!first) {
                    result.append('_');
                }
                result.append(Character.toLowerCase(currentChar));
            } else {
                result.append(currentChar);
            }
            first = false;
        }
        
        return result.toString();
    }
} 